2

我不确定我是否正在正确地构建AND查询OR。当我查询匹配标签时,我得到了一些匹配的视频。但是当我尝试第二个查询时(以确保视频与自身不相关),查询会返回所有视频。

更新:我希望返回至少有一个与所讨论标签相同的视频video,但返回的列表不包括video. 基本上是一个related_videos 功能。

from solveforx.lib.moonshots import Video
from google.appengine.ext import ndb

video = Video.query().get()
tags = video.tags or []

for tag in tags:
  print Video.query(Video.tags == tag).count() # returns 1
  print "-------"
  print Video.query(Video.tags == tag and Video.key != video.key) # returns total videos - 1
  print "========"
  # also tried this
  # print Video.query(Video.tags == tag, ndb.AND(Video.key != moonshot.key)).count() # returns 0
  # print Video.query(ndb.AND(ndb.AND(Video.tags == tag), ndb.AND(Video.key != video.key) )).count()

查看有关此的文档,但不确定操作员的工作方式。

4

2 回答 2

9

AND至少需要两个参数。你应该做:

Video.query(ndb.AND(Video.tags == tag, Video.key != video.key))

从您发布的链接中,您还可以看到更多关于如何将其结合的示例ndb.OR

于 2013-03-26T14:46:49.063 回答
5

这有效:

for tag in tags:
  Video.query(Video.tags == tag, Video.key != video.key)
于 2013-03-26T14:41:26.097 回答